package cn.wch.meshlib.frame.ack;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.RetentionPolicy.SOURCE;

import androidx.annotation.LongDef;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * 表示带注释的字节类型元素表示逻辑类型，其值应为显式命名的常量之一。
 * 如果 {@link ByteDef#flag()} 属性设置为{@code true}，则可以组合多个常量。
 * <p>
 * 实例:
 * <pre><code>
 *  &#64;Retention(SOURCE)
 *  &#64;ByteDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
 *  public @interface NavigationMode {}
 *  public static final byte NAVIGATION_MODE_STANDARD = 0x00;
 *  public static final byte NAVIGATION_MODE_LIST = 0x01;
 *  public static final byte NAVIGATION_MODE_TABS = 0x02;
 *  ...
 *  public abstract void setNavigationMode(@NavigationMode int mode);
 *  &#64;NavigationMode
 *  public abstract int getNavigationMode();
 * </code></pre>
 * 对于flag，请设置flag属性:
 * <pre><code>
 *  &#64;IntDef(
 *      flag = true,
 *      value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
 * </code></pre>
 *
 * @see LongDef
 */
@Retention(SOURCE)
@Target({ANNOTATION_TYPE})
public @interface ByteDef {
 /** 定义元素允许的常量 */
 byte[] value() default {};
 /** 定义常量是可以用作标志，还是仅用作枚举（默认值） */
 boolean flag() default false;
}
